package com.ls.mysql.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * <p>Description: 负责统一处理项目系统的日期和时间文本格式</p>
 *
 * @author 蓝伟格
 * @date 2020-02-19 23:43:46
 */
public class DateUtil {

    public final static String sqlDateFormat = "%y-%m-%d";
    public final static String sqlDateTimeFormat = "%y-%m-%d %T";

    public final static String DateFormat = "yyyy-MM-dd";
    public final static String DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
    public final static String SimpleDateTimeFormat = "yyyy-MM-dd HH:mm";

    /**
     * date比较方法 yyyy-MM-dd HH:mm:ss
     *
     * @param date1 日期1
     * @param date2 日期2
     * @return
     * @throws ParseException
     */
    public static boolean isDateCompare(String date1, String date2) throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date sd1 = df.parse(date1);
        Date sd2 = df.parse(date2);
        return sd1.before(sd2);
    }

    /**
     * date比较方法 yyyy-MM-dd 模糊比较
     *
     * @param date1 日期1
     * @param date2 日期2
     * @return
     * @throws ParseException
     */
    public static boolean isDateCompare2(String date1, String date2) throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date sd1 = df.parse(date1);
        Date sd2 = df.parse(date2);

        int i = sd1.compareTo(sd2);
        return i <= 0;
    }

    /**
     * date比较方法 yyyy-MM-dd 是否相等
     *
     * @param date1 日期1
     * @param date2 日期2
     * @return
     * @throws ParseException
     */
    public static boolean isDateCompare3(String date1, String date2) throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date sd1 = df.parse(date1);
        Date sd2 = df.parse(date2);

        int i = sd1.compareTo(sd2);
        return i == 0;
    }

    /**
     * 获取当前日期和时间的文本描述 yyyy-MM-dd HH:mm:ss
     *
     * @return 当前时间格式化的描述
     * @throws ParseException
     */
    public static Date getCurrentDateTime() throws ParseException {
        Date date = new Date();
        String str = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        return sdf.parse(sdf.format(date));
    }

    /**
     * 获取当前日期和时间的文本描述 yyyy-MM-dd HH:mm:ss
     *
     * @return 当前时间格式化的描述
     * @throws ParseException
     */
    public static String getCurrentDTime() {
        Date date = new Date();
        String str = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        return sdf.format(date);
    }

    /**
     * 获取当前日期和时间的文本描述 yyyy-MM-dd
     *
     * @return 当前时间格式化的描述
     * @throws ParseException
     */
    public static Date getCurrentDate() throws ParseException {
        Date date = new Date();
        String str = "yyyy-MM-dd";
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        return sdf.parse(sdf.format(date));
    }

    /**
     * 获取当前日期的文本描述 yyyy-MM-dd
     *
     * @return 当前时间格式化的描述
     * @throws ParseException
     */


    /**
     * <p>Description: 将格式化的日期文本的日期加上指定天数，可以为负数</p>
     *
     * @throws ParseException
     * @author 蓝伟格  @date 2020-02-25 15:10:02
     */
    public static String getCurrentDateText() {
        Date date = new Date();
        String str = "yyyy-MM-dd";
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        return sdf.format(date);
    }

    public static String DateAddDays(String date, int count) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        Date sDate = sdf.parse(date);
        Calendar c = Calendar.getInstance();
        c.setTime(sDate);
        c.add(Calendar.DATE, count);
        sDate = c.getTime();
        return sdf.format(sDate);
    }

    public static Date DateAddDays(Date date, int count) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, count);
        return c.getTime();
    }

    /**
     * <p>Description: 将格式化的日期文本的日期加上指定分钟，可以为负数</p>
     *
     * @throws ParseException
     * @author 蓝伟格  @date 2020-02-25 15:10:02
     */
    public static String DateAddMinutes(String date, int count) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DateTimeFormat);
        Date sDate = sdf.parse(date);
        Calendar c = Calendar.getInstance();
        c.setTime(sDate);
        c.add(Calendar.MINUTE, count);
        sDate = c.getTime();
        return sdf.format(sDate);
    }

    /**
     * <p>Description: 将格式化的日期文本的日期时间加上指定天数，可以为负数</p>
     *
     * @throws ParseException
     * @author 蓝伟格  @date 2020-02-25 15:10:02
     */
    public static String DTimeAddDays(String date, int count) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DateTimeFormat);
        Date sDate = sdf.parse(date);
        Calendar c = Calendar.getInstance();
        c.setTime(sDate);
        c.add(Calendar.DATE, count);
        sDate = c.getTime();
        return sdf.format(sDate);
    }

    /**
     * <p>Description: 获取昨天的日期的文本描述</p>
     *
     * @throws ParseException
     * @author 蓝伟格  @date 2020-02-25 15:10:02
     */
    public static String getYesterdayDate() {
        Date date = new Date();
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, -1);
        date = c.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        return sdf.format(date);
    }

    /**
     * 获取当前日期和时间的文本描述,按str格式化
     *
     * @param str
     * @return
     * @throws ParseException
     * @author mopeiwen
     */
    public static String getCurrentTime(String str) throws ParseException {
        return new SimpleDateFormat(str).format(new Date(System.currentTimeMillis()));
    }

    /**
     * <p>Description: 校验日期数据格式</p>
     *
     * @author 蓝伟格  @date 2020-02-26 14:24:02
     */
    public static boolean isValidDate(String dateText) {
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        sdf.setLenient(false);
        try {
            sdf.parse(dateText);
        } catch (ParseException e) {
            return false;
        }
        return true;
    }

    /**
     * <p>Description: 校验日期数据格式</p>
     *
     * @author 蓝伟格  @date 2020-02-26 14:24:02
     */
    public static boolean isValidSimpleDateTime(String dateText) {
        SimpleDateFormat sdf = new SimpleDateFormat(SimpleDateTimeFormat);
        sdf.setLenient(false);
        try {
            sdf.parse(dateText);
        } catch (ParseException e) {
            return false;
        }
        return true;
    }

    /**
     * <p>Description: 将斜杠分隔日期的日期格式转换为当前项目使用的分隔风格</p>
     *
     * @author 蓝伟格  @date 2020-02-25 21:04:17
     */
    public static String convertFormatToCurr(String dateText) {
        return dateText.replace("/", ":");
    }

    /**
     * <p>Description: 将项目默认的日期格式转换为指定的日期格式（会忽略掉时间部分）</p>
     *
     * @throws ParseException
     * @author 蓝伟格  @date 2020-02-25 21:04:17
     */
    public static String convertFormat(String dateText, String format) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        SimpleDateFormat targetSdf = new SimpleDateFormat(format);
        return targetSdf.format(sdf.parse(dateText));
    }

    public static Date parseToDate(String dateText) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        return sdf.parse(dateText);
    }

    public static String format(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(DateTimeFormat);
        return sdf.format(date);
    }


}
